package com.xizi.lotterySystem;
import java.util.*;
//
//public class Main{
//
//    public static long[][] arr;
//
//    public static long dfs(int n,int m,int a,int b){
//        if(arr[n][m] != 0){
//            return arr[n][m];
//        }
//        long left = 0;
//        long right = 0;
//        if(n - 2 >= 0 && m - 1 >= 0)
//            left = dfs(n - 2,m - 1,a,b) + a;
//        if(n - 1 >= 0 && m - 2 >= 0)
//            right = dfs(n - 1,m - 2,a,b) + b;
//
//        arr[n][m] = Math.max(left , right);
//        return Math.max(left , right);
//    }
//
//    public static void main(String[] args){
//        Scanner sc = new Scanner(System.in);
//        int n = sc.nextInt();
//        int m = sc.nextInt();
//        int a = sc.nextInt();
//        int b = sc.nextInt();
//        arr = new long[n+2][m+2];
//
//        System.out.println(dfs(n,m,a,b));
//    }
//
//}


import java.util.*;

//public class Main{
//
//    public static int n;
//
//    public static void main(String[] args){
//        Scanner sc = new Scanner(System.in);
//        n = sc.nextInt();
//        String str = sc.next();
//        int[] hash = new int[26];
//
//        for(int i = 0;i < n;i++){
//            hash[str.charAt(i) - 'a']++;
//        }
//
//        StringBuilder ans = new StringBuilder();
//
//        if(ans.length() == n){
//            System.out.println("yes");
//            System.out.println(ans);
//        }
//        else System.out.println("no");
//    }
//
//
//
//    //83.33%
//    // public static int n;
//
//    // public static void main(String[] args){
//    //     Scanner sc = new Scanner(System.in);
//    //     n = sc.nextInt();
//    //     String str = sc.next();
//    //     int[] hash = new int[26];
//
//    //     for(int i = 0;i < n;i++){
//    //         hash[str.charAt(i) - 'a']++;
//    //     }
//    //     String ans = dfs(hash,"");
//    //     // System.out.println(ans);
//    //     if(ans.length() == n){
//    //         System.out.println("yes");
//    //         System.out.println(ans);
//    //     }
//    //     else System.out.println("no");
//    // }
//
//    // public static String dfs(int[] hash,String ans){
//    //     if(ans.length() == n){
//    //         return ans;
//    //     }
//    //     String ret = "";
//    //     for(int i = 0; i < 26;i++){
//    //         char tep = (char)(i + 'a');
//    //         if(hash[i] != 0 && (ans.length() == 0 || ans.charAt(ans.length() - 1) != tep)){
//    //             hash[i]--;
//    //             ret = dfs(hash,ans + tep);
//    //             if(ret.length() == n){
//    //                 return ret;
//    //             }
//    //             hash[i]++;
//    //         }
//    //     }
//    //     return ret;
//    // }
//}

public class Main{
    public static void main(String[] args){

        int[][] arr = new int[10][2];

        Arrays.sort(arr,(int[] o1,int[] o2) ->
                o1[0] == o2[0] ? o2[1] - o1[1] : o2[0] - o1[0]);

        Arrays.sort(arr, new Comparator<int[]>() {
            @Override
            public int compare(int[] o1, int[] o2) {
                if(o1[0] == o2[0]){
                    return o2[1] - o1[1];
                }else {
                    return o2[0] - o1[0];
                }
            }
        });

        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        int[] hash = new int[n+1];
        for(int i = 0;i < n;i++){
            hash[sc.nextInt()]++;
        }

        Queue<Integer> qu = new LinkedList();
        int maxCount = 0;
        for(int i = 1;i <= n;i++){
            if(hash[i] != 0){
                qu.add(hash[i]);
                maxCount = Math.max(maxCount,hash[i]);
            }
        }
        if(qu.size() > m){
            System.out.println(-1);
            return;
        }
        int size = qu.size();
        for(int i =1 ;i <= maxCount;i++){
            int count = 0;
            for(int j = 0;j < size;j++){

                int tep = qu.poll();
                count += tep / i + (tep % i == 0 ? 0 : 1);
                qu.add(tep);

                if(count > m) break;

            }
            if(count == m) {
                System.out.println(i);
                return;
            }
        }
        System.out.println(-1);
    }
}